{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d8026ddc",
   "metadata": {},
   "source": [
    "# Benchmark Tabular Causal Discovery Algorithms\n",
    "\n",
    "The benchmarking module for continuous data is **BenchmarkContinuousTabular** and for discrete data is **BenchmarkDiscreteTabular**. We import them as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f9368475",
   "metadata": {},
   "outputs": [],
   "source": [
    "from causalai.benchmark.tabular.continuous import BenchmarkContinuousTabular\n",
    "from causalai.benchmark.tabular.discrete import BenchmarkDiscreteTabular"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ec17c2f5",
   "metadata": {},
   "source": [
    "Bechmarking modules allow benchmarking causal discovery algorithms on synthetically generated data across various aspects. For tabular data, the supported methods for the aforementioned modules:\n",
    "\n",
    "1. **benchmark_variable_complexity**: variable complexity (BenchmarkDiscreteTabular and BenchmarkContinuousTabular)\n",
    "2. **benchmark_sample_complexity**: sample complexity (BenchmarkDiscreteTabular and BenchmarkContinuousTabular)\n",
    "3. **benchmark_graph_density**: graph density (BenchmarkDiscreteTabular and BenchmarkContinuousTabular)\n",
    "4. **benchmark_noise_type**: noise type (BenchmarkContinuousTabular)\n",
    "5. **benchmark_snr**: signal to noise ratio (BenchmarkContinuousTabular)\n",
    "\n",
    "In addition to bechmarking on synthetic data, we also support benchmarking algorithms on user provided data. This is discussed in more detail under the section **Custom Data**.\n",
    "\n",
    "The main purpose of synthetic data benchmarking is to evaluate two aspects:\n",
    "\n",
    "1. how a specific caual discovery algorithm performs for different values of a variant (the above listed aspects).\n",
    "2. how different algorithms compare against each other in a particular setting.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1700ee7e",
   "metadata": {},
   "source": [
    "### How to specify causal discovery algorithms?\n",
    "\n",
    "Specifying causal discovery algorithms supported by the CausalAI library is very easy as shown below. Users also have the option to specify a custom algorithm as long as it adheres to the basic requirements. This is discussed on more detail under the section **Custom Algorithms**.\n",
    "\n",
    "Let's begin with a simple example, in which we want to benchmark causal discovery algorithms on synthetically generated discrete data.\n",
    "\n",
    "We begin by importing the supported algorithms for discrete data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f8cd1c52",
   "metadata": {},
   "outputs": [],
   "source": [
    "from causalai.models.tabular.pc import PC\n",
    "from causalai.models.common.CI_tests.partial_correlation import PartialCorrelation\n",
    "from causalai.models.common.CI_tests.discrete_ci_tests import DiscreteCI_tests\n",
    "\n",
    "from causalai.models.tabular.ges import GES\n",
    "from causalai.models.tabular.lingam import LINGAM\n",
    "\n",
    "from functools import partial\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05cbe191",
   "metadata": {},
   "source": [
    "Next, we create a Python dictionary of these algorithms in a format that the benchmarking module requires. Then we run the benchmarking module for sample complexity."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "35a561a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "algo_dict = {\n",
    "        'PC-Pearson':partial(PC, CI_test=DiscreteCI_tests(method=\"pearson\"), use_multiprocessing=False,\n",
    "                                  prior_knowledge=None),\n",
    "        'PC-Log-Likelihood':partial(PC, CI_test=DiscreteCI_tests(method=\"log-likelihood\"), use_multiprocessing=False,\n",
    "                                  prior_knowledge=None),}\n",
    "\n",
    "kargs_dict = {\n",
    "        'PC-Pearson': {'max_condition_set_size': 4, 'pvalue_thres': 0.01},\n",
    "        'PC-Log-Likelihood': {'max_condition_set_size': 4, 'pvalue_thres': 0.01},}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "00321f96",
   "metadata": {},
   "source": [
    "**algo_dict** specifies the algorithms. Specifically, keys are the names of the algorithms, and values are the algorithm class. We use partial in order to pre-specify some arguments of the algorithm class constructor-- CI_test, use_multiprocessing, and prior_knowledge in the above cases.\n",
    "\n",
    "All these algorithms have a .run() method that performs the causal discovery. The benchmarking module internally calls this run method. This run method may have some arguments of its own. These arguments are pre-specified using **kargs_dict** above, and passed to the benchmarking module below. Of course, the kargs_dict is algorithm specific, and may be optional.\n",
    "\n",
    "**Default algo_dict and kargs_dict**: If algo_dict and kargs_dict are not specified (pass None for both), then there are default algo_dict and kargs_dict, that are used by the benchmarking modules, which include all the currently supported algorithms. The default algo_dict and kargs_dict for the BenchmarkDiscreteTabular module can be accessed through:\n",
    "\n",
    "BenchmarkDiscreteTabular.default_algo_dict and BenchmarkDiscreteTabular.default_kargs_dict\n",
    "\n",
    "Similarly, the default algo_dict and kargs_dict for the BenchmarkContinuousTabular module can be accessed through:\n",
    "\n",
    "BenchmarkContinuousTabular.default_algo_dict and BenchmarkContinuousTabular.default_kargs_dict\n",
    "\n",
    "We run the benchmark_sample_complexity method of the module below,"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "63ff3248",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:11<00:00,  1.13s/it]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:10<00:00,  1.08s/it]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:11<00:00,  1.17s/it]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:24<00:00,  2.46s/it]\n"
     ]
    }
   ],
   "source": [
    "b = BenchmarkDiscreteTabular(algo_dict=algo_dict, kargs_dict=kargs_dict, \n",
    "                             num_exp=10, custom_metric_dict=None)\n",
    "b.benchmark_sample_complexity(T_list=[100, 500,1000,5000], num_vars=20, graph_density=0.1,\\\n",
    "                           fn = lambda x:x, coef=0.1, noise_fn=np.random.randn) # default arguments in the library\n",
    "# note that the first argument for all the benchmarking methods is always the list of values of the variant"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2cbe1365",
   "metadata": {},
   "source": [
    "Here, in addition to algo_dict and kargs_dict, we have passed two additional arguments-- num_exp and custom_metric_dict to the benchmarking module constructer. \n",
    "\n",
    "num_exp specifies the number of experiments (each with a different random seed) to run per configuration. \n",
    "\n",
    "custom_metric_dict can be used to specify any metric to record in addition to the default metrics that are recorded for the experiments conducted-- f1_score, precision, recall, and time_taken. We provide more detail about this below under the section **custom_metric_dict**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "2c4ae34b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt=b.plot('f1_score', xaxis_mode=1)\n",
    "# plt.savefig('myfig.pdf')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2135f199",
   "metadata": {},
   "source": [
    "### Useful Methods and Attributes\n",
    "\n",
    "The benchmarking modules have the following attributes that users may find useful:\n",
    "\n",
    "1. results_full: stores the results for all the experiments conducted when calling a benchmarking method (e.g. benchmark_sample_complexity). The results are stored as a List. The length of this list is the number of variants provided in the benchmarking method (4 in the above example-- 100, 500,1000,5000). Each item is a list of dictionary. The length of this inner list is num_exp. Finally, each dictionary has keys same as the algorithm names (PC-Pearson and PC-Log-Likelihood in the above example), and their corresponding values are the computed metrics.\n",
    "\n",
    "2. default_algo_dict: Python dictionary containing the default algorithms for causal discovery benchmarking.\n",
    "\n",
    "3. default_kargs_dict: Python dictionary containing the default algorithms' arguments passed to the corresponding algorithm's run method.\n",
    "\n",
    "The benchmarking modules have the following methods that users may find useful:\n",
    "\n",
    "1. aggregate_results: This method takes metric name as input and computes attributes results_mean and results_std which matrices of shape num_algorithms x num_variants, and contain the mean and standard deviation of the results of each algorithm and variant.\n",
    "\n",
    "2. plot: This method takes metric_name and xaxis_mode as inputs, and returns the matplotlib object for the plot, which cann be used to plot or save the figure. metric_name can be one of f1_score, precision, recall, and time_taken, or a custom metric (if one was specified to the benchmarking module). xaxis_mode can be either 0 or 1 (default). When 0, x-axis is algorithm names, and when 1, x-axis is the values of the variant. Variant denotes the configurations of the argument being varied (e.g. in benchmark_variable_complexity, the number of variables).\n",
    "\n",
    "3. bechmark_custom_dataset: This method can be used to benchmark causal discovery algorithms on user provided datasets. More details can be found below under the section **Custom Data**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "81db5824",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a495a0b5",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "bfcb40d7",
   "metadata": {},
   "source": [
    "### custom_metric_dict"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bf3b52b5",
   "metadata": {},
   "source": [
    "In the benchmarking module constructor, users may specify their custom metrics in the argument custom_metric_dict. The argument must be a Python dictionary with the metric name (str) as keys, and the corresponding values must be a callable function. This function takes 2 arguments-- graph_est, graph_gt, where graph_est is the estimated graph and graph_gt is the ground truth graph. Both graphs are in the form of a Python dictionary where keys are variable names and values are list of parent names. The output of this function must be a scalar, the metric, which will get aggregated by the bechmarking module.\n",
    "\n",
    "As an example, here is a dummy custom_metric_dict and how we use it:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "3eb0830d",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:12<00:00,  1.21s/it]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:12<00:00,  1.22s/it]\n"
     ]
    },
    {
     "data": {
      "image/png": "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MhKzZ88u075x40aYmVX/mTRERNpCJpPB0dERDg4OKo89IKqvcnJykJ6ejrS0NDwdYfLz8zFy5Mgq3QWmdQHoaXK5HG3atMGIESMwd+7cMutef/11/PPPP4iLi6vwzSjvDJCLiwvu3r1bK7fB79+/H/369dPZW3BZn3bT9RpZX1kZGRnIzs5G48aNYWZmVqUv7KtLQgjlFwXW97Gqg/VVvF9+fj7u3LkDS0vLch9dkp2dDVtb2/p/G7ytrS309fWRkZGh0p6RkVHhHJ+nGRoaokOHDrh69apKu1wux5tvvombN2/iwIEDlb4RxsbG5T4fxdDQsNb+gazNvusD1qf9dL1G1vcvZ2dn6Ovr4+7du7U8Ks0QQuDRo0cwNTXV2YDA+ipmY2MDBweHcvetzt/pOg1ARkZG8PHxQWxsrPIryRUKBWJjYxEaGlqlPoqLi5GYmIhBgwYp20rDT3JyMg4ePIhGjRrVxvCJiHRC6WUwOzs7rZgbJZfL8ccff6Bnz546GWJZX8UMDQ2hr6+vkXHU+V1gYWFhCA4ORqdOndClSxdER0cjLy9PeVdYUFAQnJ2dMX/+fADAnDlz8OKLL8Ld3R0PHz7E4sWLcfPmTbzzzjsASt7Y//znPzhz5gx27tyJ4uJipKeXfEFXw4YNYWRkVDeFEhHVc/r6+hr7cKlN+vr6KCoqgomJiU4GBNb3fNR5ABo2bBju3LmDWbNmIT09He3bt8eePXuU1/ZSUlJUvir7wYMHGDduHNLT02FjYwMfHx8cO3YMnp6eAEoeJBcTEwMAaN++vcprHTx4EL17934udREREVH9VecBCABCQ0MrvOQVFxensrx06VIsXbq0wr7c3NzKzAonIiIielK9eBQGERER0fPEAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSU+cBaNmyZXBzc4OJiQl8fX1x4sSJCrddt24dZDKZyo+JiYnKNlu3bkX//v3RqFEjyGQyJCQk1HIFREREpG3qNABt3rwZYWFhiIiIwJkzZ+Dt7Y2AgABkZmZWuI+lpSXS0tKUPzdv3lRZn5eXh+7du2PhwoW1PXwiIiLSUgZ1+eJRUVEYN24cxowZAwBYsWIFdu3ahTVr1mDGjBnl7iOTyeDg4FBhn6NHjwYA3LhxQ+PjJSIiIt1QZwGosLAQp0+fRnh4uLJNT08P/v7+iI+Pr3C/3NxcuLq6QqFQoGPHjpg3bx5eeOGFGo2loKAABQUFyuXs7GwAgFwuh1wur1HfTyvtT9P91hesT/vpeo2sT/vpeo2sr+Z9V4VMCCE0PoIqSE1NhbOzM44dOwY/Pz9l+0cffYRDhw7h+PHjZfaJj49HcnIy2rVrh6ysLCxZsgR//PEHLl68iCZNmqhse+PGDTRr1gxnz55F+/btKx1LZGQkZs+eXaZ948aNMDMzU69AIiIieq7y8/MxcuRIZGVlwdLSstJt6/QSWHX5+fmphKWuXbuiTZs2WLlyJebOnat2v+Hh4QgLC1MuZ2dnw8XFBf3793/mG1hdcrkc+/fvR79+/WBoaKjRvusD1qf9dL1G1qf9dL1G1qe+0is4VVFnAcjW1hb6+vrIyMhQac/IyKh0js+TDA0N0aFDB1y9erVGYzE2NoaxsXG5/dfWH77a7Ls+YH3aT9drZH3aT9drZH3q9VlVdXYXmJGREXx8fBAbG6tsUygUiI2NVTnLU5ni4mIkJibC0dGxtoZJREREOqhOL4GFhYUhODgYnTp1QpcuXRAdHY28vDzlXWFBQUFwdnbG/PnzAQBz5szBiy++CHd3dzx8+BCLFy/GzZs38c477yj7vH//PlJSUpCamgoASEpKAgA4ODhU+cwSERER6bY6DUDDhg3DnTt3MGvWLKSnp6N9+/bYs2cP7O3tAQApKSnQ0/v3JNWDBw8wbtw4pKen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6elh1apVFYYfAAgPD0dYWJhyOTs7Gy4uLujfv/8z38Dqksvl2L9/P/r16wdDQ0ON9l0fsD7tp+s1sj7tp+s1sj71lV7BqYo6vQRWHTk5ORg9ejRWrVoFW1vbCrf75ptv8OeffyImJgaurq74448/8P7778PJyQn+/v7l7mNsbAxjY+My7YaGhrX2h682+64PWJ/20/UaWZ/20/UaWZ96fVZVnQUgW1tb6OvrIyMjQ6U9IyMDDg4OZba/du0abty4gcGDByvbFAoFAMDAwABJSUlwcnLCJ598gm3btuHll18GALRr1w4JCQlYsmRJhQGIiIiIpKXO7gIzMjKCj48PYmNjlW0KhQKxsbHw8/Mrs33r1q2RmJiIhIQE5c+QIUPQp08fJCQkwMXFRTlpWU9PtSx9fX1lWCIiIiKq00tgYWFhCA4ORqdOndClSxdER0cjLy9PeVdYUFAQnJ2dMX/+fJiYmKBt27Yq+1tbWwOAst3IyAi9evXC9OnTYWpqCldXVxw6dAjff/89oqKinmttREREVH/VaQAaNmwY7ty5g1mzZiE9PR3t27fHnj17lBOjU1JSypzNeZaffvoJ4eHhGDVqFO7fvw9XV1d88cUXmDBhQm2UQERERFqozidBh4aGIjQ0tNx1cXFxle67bt26Mm0ODg5Yu3atBkZGREREuqrOH4VBRERE9LwxABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5DAAERERkeQwABEREZHkMAARERGR5BjU9QDqIyEEACA7O1vjfcvlcuTn5yM7OxuGhoYa77+usT7tp+s1sj7tp+s1sj71lX5ul36OV4YBqBw5OTkAABcXlzoeCREREVVXTk4OrKysKt1GJqoSkyRGoVAg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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def mymetric_fn1(graph_est, graph_gt):\n",
    "    '''\n",
    "    graph_est, graph_gt are of the following form: {'a': ['b', 'c'], 'b': [], 'c': []}\n",
    "    where keys are children and values specify the list of parents.\n",
    "    '''\n",
    "    # do something\n",
    "    return 0.5\n",
    "def mymetric_fn2(graph_est, graph_gt):\n",
    "    '''\n",
    "    graph_est, graph_gt are of the following form: {'a': ['b', 'c'], 'b': [], 'c': []}\n",
    "    where keys are children and values specify the list of parents.\n",
    "    '''\n",
    "    # do something\n",
    "    return 1\n",
    "\n",
    "custom_metric_dict = {'mymetric1': mymetric_fn1, 'mymetric2': mymetric_fn2}\n",
    "\n",
    "b = BenchmarkDiscreteTabular(algo_dict=algo_dict, kargs_dict=kargs_dict, \n",
    "                             num_exp=10, custom_metric_dict=custom_metric_dict)\n",
    "b.benchmark_sample_complexity(T_list=[100, 500], num_vars=20, graph_density=0.1,\\\n",
    "                           fn = lambda x:x, coef=0.1, noise_fn=np.random.randn) # default arguments in the library\n",
    "plt=b.plot('mymetric1', xaxis_mode=1)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4fb6a0dd",
   "metadata": {},
   "source": [
    "### Custom Algorithms\n",
    "\n",
    "Users may specify their own algorthms in the benchmarking module. Here we show the format such an algorithm must adhere to in order for the benchmarking module to fuction properly. Users may use this as a template to specify their own algorithm."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "4d82f4c4",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 31.85it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00,  3.52it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:48<00:00,  4.86s/it]\n"
     ]
    },
    {
     "data": {
      "image/png": "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DBhA586di/8FEqnidFtKxEl07dqV3r17M27cuEKvubi4FLgFAxQ57sPNza3Ac5PJVOQ+q9Va7LjS0tLo378/W7duLbDt3LmTrl272o/z8fEp9jXLwogRI/j88885e/Ys77zzDjExMXTr1g2AF154gVmzZvH444+zfPlytm7dSu/evQsNdL5czOvWrWPQoEH07duXRYsW8fPPP/PUU09d0YDptLQ0ABYvXlzg6/nHH3/Yx93ccMMN7N+/nzFjxnD48GGuv/76K0p6RaoaJTciTmTatGksXLiQdevWFdgfHBxMcnJygQSnLNemWb9+vf3fOTk5bN68maZNmwJw1VVX8fvvvxMVFUWDBg0KbCVJaPz9/QkPD2fNmjUF9q9Zs4ZmzZqVOOY77rgDFxcX5s+fz3vvvce9995rnz6/Zs0abr75Zu655x5iY2OpX78+O3bsKPF7rF27lnr16vHUU08RFxdHw4YN2b9/f6HjDhw4wOHDh+3P169fj4uLC40bNy50bLNmzfDw8ODAgQOFvp6RkZH244KDgxk6dCgffPABM2fO5M033yxx/CJVlW5LiTiRli1bMmjQIF555ZUC+7t3787x48f5z3/+w+23305CQgLffvttodsjpTVnzhwaNmxI06ZNefnllzl16hT33nsvAA888ABvvfUWd911F4899hiBgYHs2rWLjz/+mP/+97+YzeZiv8/YsWOZOHEiMTExtG7dmnfeeYetW7fy4YcfljhmX19fBg4cyLhx40hNTWXYsGH21xo2bMhnn33G2rVrqVmzJjNmzODo0aMlTqIaNmzIgQMH+Pjjj2nXrh2LFy/myy+/LHScp6cnQ4cO5cUXXyQ1NZWHHnqIO+64o9AtKTAGKD/66KOMGTMGq9XK1VdfzZkzZ1izZg3+/v4MHTqUCRMm0LZtW5o3b05WVhaLFi2yJ5si1YF6bkSczOTJkwvdNmratCmvvfYac+bMITY2lo0bN5bpbYpp06Yxbdo0YmNjWb16Nd988419dk5+b0tubi69evWiZcuWjB49mho1ahQY31McDz30EPHx8TzyyCO0bNmShIQEvvnmGxo2bFiquEeMGMGpU6fo3bs34eHh9v1PP/00V111Fb1796Z79+6EhYWVaoXgm266iTFjxjBq1Chat27N2rVrGT9+fKHjGjRowK233krfvn3p1asXrVq14rXXXrvodZ999lnGjx/P1KlTadq0KX369GHx4sVER0cD4O7uzrhx42jVqhVdu3bFbDbz8ccflzh+karKZPv7jXgRERGRKkw9NyIiIuJUlNyIiIiIU1FyIyIiIk5FyY2IiIg4FSU3IiIi4lSU3IiIiIhTUXIjIiIiTkXJjYiIiDgVJTciIiLiVJTciIiIiFNRciMiIiJO5f8BT8lWNKW0F70AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from causalai.data.tabular import TabularData\n",
    "\n",
    "class myAlgorithm:\n",
    "    def __init__(self, data):\n",
    "        '''\n",
    "        :param data: this is a TabularData object and contains attributes likes data.data_arrays, which is a \n",
    "            list of numpy array of shape (observations N, variables D).\n",
    "        :type data: TabularData object \n",
    "        '''\n",
    "        self.data = data\n",
    "        # do something\n",
    "        \n",
    "    def run(self, **kargs):\n",
    "        a = kargs['a']\n",
    "        result = {name: {'parents': []} for name in self.data.var_names} # result must follow this format\n",
    "        # do something and compute parents\n",
    "        return result\n",
    "    \n",
    "\n",
    "algo_dict = {\n",
    "        'GES':partial(GES, use_multiprocessing=False, prior_knowledge=None), \n",
    "        'my_algorithm1':myAlgorithm,}\n",
    "\n",
    "kargs_dict = {\n",
    "        'GES': {'phases': ['forward', 'backward', 'turning']},\n",
    "        'my_algorithm1': {'a':4},}\n",
    "\n",
    "\n",
    "b = BenchmarkContinuousTabular(algo_dict=algo_dict, kargs_dict=kargs_dict, \n",
    "                             num_exp=10, custom_metric_dict=custom_metric_dict)\n",
    "b.benchmark_variable_complexity(num_vars_list=[5, 10, 20], graph_density=0.2, T=5000,\\\n",
    "                           fn = lambda x:x, coef=0.1, noise_fn=np.random.randn)\n",
    "plt=b.plot('f1_score', xaxis_mode=1)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f4f22181",
   "metadata": {},
   "source": [
    "my_algorithm1 is a dummy algorithm which always returns a graph without no edges as the estimated causal graph. As expected, comparing it with the GES algorithm in CausalAI for continuous tabular data shows GES outperforming my_algorithm1 on the variable complexity benchmark."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3f2400c5",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "2efc4f96",
   "metadata": {},
   "source": [
    "### Custom Data\n",
    "\n",
    "Users may use their own data to benchmark causal discovery algorithms instead of using synthetic data generated in our benchmarking module. For this, we support the bechmark_custom_dataset method. This method takes as input a list of datasets, where each item in the list is a triplet-- (data_array, var_names, graph_gt), where data_array is a 2D Numpy data array of shape (samples x variables), var_names is a list of variable names, and graph_gt is the ground truth causal graph in the form of a Python dictionary, where keys are the variable names, and the corresponding values are a list of parent names.\n",
    "\n",
    "To illustrate how it works, we manually generate a list of synthetic datasets below, and call the bechmark_custom_dataset method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "158d9ec1",
   "metadata": {},
   "outputs": [],
   "source": [
    "from causalai.data.data_generator import DataGenerator, GenerateSparseTabularSEM\n",
    "\n",
    "fn = lambda x:x\n",
    "coef = 0.1\n",
    "T = 5000\n",
    "\n",
    "data_list = []\n",
    "for i in range(5):\n",
    "    var_names = [str(j) for j in range(np.random.randint(4,8))]\n",
    "    sem = GenerateSparseTabularSEM(var_names=var_names, graph_density=0.5, seed=1)\n",
    "    data_array, var_names, graph_gt = DataGenerator(sem, T=T, seed=i, discrete=False,\n",
    "                                                    noise_fn=[np.random.rand]*(len(var_names)))\n",
    "    data_list.append((data_array, var_names, graph_gt))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "8fd65005",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:00<00:00,  6.56it/s]\n"
     ]
    }
   ],
   "source": [
    "# use default algorithms\n",
    "b = BenchmarkContinuousTabular(algo_dict=None, kargs_dict=None, custom_metric_dict=None)\n",
    "b.bechmark_custom_dataset(data_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "a6c5d381",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt = b.plot('f1_score', xaxis_mode=0)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "953e3eb7",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}